/**
 * \class IdentExp IdentExp.h <AbsSyn/IdentExp.h>
 *
 *  Created on: 4 apr 2011
 *      Author: ytc0039
 *
 *  \brief Identification expression
 *
 *  used for variable names in a expression.
 *
 *  int x = 5 + y;
 *
 * \ingroup AbsSyn
 *
 * \ingroup Expressions
 */

#ifndef IDENTEXP_H_
#define IDENTEXP_H_

#include <Interfaces/IExp.h>
#include <boost/shared_ptr.hpp>
#include <AbsSyn/AbsSyn.h>
class Ident;


class IdentExp: public IExp {
public:


	/**
	 * \brief one static Ident expression to be used
	 * for the lists
	 */

	IdentExp(const Ident *ident);
	virtual ~IdentExp();

	virtual void accept(IExpVisitor *v);

	/**
	 * \addtogroup Cloneable
	 * @{
	 *
	 * \brief Cloneable Ident
	 *
	 * This clones the Identification expression, the return value should be deleted by the user
	 *
	 * @return clone of IdentExp
	 */
	virtual IdentExp* clone() const;
	/*! @} */

	AbsSyn::IdentPtr getIdent() const;

	/**
	 * \brief Implements IPrintable
	 *
	 *
	 * @return string representation
	 */
	virtual std::string toString()const;
private:
	AbsSyn::IdentPtr m_Ident;

};

#endif /* IDENTEXP_H_ */
